#include "ScriptPCH.h"
#include "all_in_one_NPC.h"

class npc_all_in_one : public CreatureScript
{
public:
    npc_all_in_one() : CreatureScript("npc_all_in_one") { }
	
	// Learn Profession
	bool LearnProfession(Player * pPlayer, uint32 iAction)
	{
		std::wstring namePart;

		if (iAction == 0) Utf8toWStr("Alchemy", namePart);
		if (iAction == 1) Utf8toWStr("Blacksmithing", namePart);
		if (iAction == 2) Utf8toWStr("Enchanting", namePart);
		if (iAction == 3) Utf8toWStr("Engineering", namePart);
		if (iAction == 4) Utf8toWStr("Herbalism", namePart);
		if (iAction == 5) Utf8toWStr("Inscription", namePart);
		if (iAction == 6) Utf8toWStr("Jewelcrafting", namePart);
		if (iAction == 7) Utf8toWStr("Leatherworking", namePart);
		if (iAction == 8) Utf8toWStr("Mining", namePart);
		if (iAction == 9) Utf8toWStr("Skinning", namePart);
		if (iAction == 10) Utf8toWStr("Tailoring", namePart);
		if (iAction == 11) Utf8toWStr("Cooking", namePart);
		if (iAction == 12) Utf8toWStr("First Aid", namePart);
		if (iAction == 13) Utf8toWStr("Fishing", namePart);

		wstrToLower(namePart);

		std::string skillName;

		SkillLineEntry const * targetSkillInfo = NULL;
		for (uint32 i = 1; i < sSkillLineStore.GetNumRows(); ++i)
		{
			SkillLineEntry const * skillInfo = sSkillLineStore.LookupEntry(i);
			if (!skillInfo)
				continue;

			if ((skillInfo->categoryId != SKILL_CATEGORY_PROFESSION &&
				skillInfo->categoryId != SKILL_CATEGORY_SECONDARY) ||
				!skillInfo->canLink)
				continue;

			int DBCLocale = 0;
			skillName = skillInfo->name[DBCLocale];
			if (skillName.empty())
				continue;

			if (!Utf8FitTo(skillName, namePart))
			{
				DBCLocale = 0;
				for (; DBCLocale < MAX_LOCALE; ++DBCLocale)
				{
					if (DBCLocale == 0)
						continue;

					skillName = skillInfo->name[DBCLocale];
					if (skillName.empty())
						continue;

					if (Utf8FitTo(skillName, namePart))
						break;
				}
			}

			if (DBCLocale < MAX_LOCALE)
			{
				targetSkillInfo = skillInfo;
				break;
			}
		}

		if (!targetSkillInfo)
			return false;

		LearnProfessionHelper(pPlayer, targetSkillInfo->id);

		uint16 maxLevel = pPlayer->GetPureMaxSkillValue(targetSkillInfo->id);
		pPlayer->SetSkill(targetSkillInfo->id, pPlayer->GetSkillStep(targetSkillInfo->id), maxLevel, maxLevel);
		return true;
	}

	// Learn Profession Helper
	void LearnProfessionHelper(Player * pPlayer, uint32 skillID)
	{
		uint32 classMask = pPlayer->getClassMask();

		for (uint32 i = 0; i < sSkillLineAbilityStore.GetNumRows(); ++i)
		{
			SkillLineAbilityEntry const * skillLine = sSkillLineAbilityStore.LookupEntry(i);
			if (!skillLine)
				continue;

			// Wrong skill
			if (skillLine->skillId != skillID)
				continue;

			// Not high rank
			if (skillLine->forward_spellid)
				continue;

			// Skip racial skills
			if (skillLine->racemask != 0)
				continue;

			// Skip wrong class skills
			if (skillLine->classmask && (skillLine->classmask & classMask) == 0)
				continue;

			SpellEntry const * spellInfo = sSpellStore.LookupEntry(skillLine->spellId);
			if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo, pPlayer, false))
				continue;

			pPlayer->learnSpell(skillLine->spellId, false);
		}
	}

	// Enchant Item
	void EnchantItem(Player * pPlayer, Item * pItem, uint32 enchantID)
	{
		// Remove old enchant
		pPlayer->ApplyEnchantment(pItem, PERM_ENCHANTMENT_SLOT, false);
		pItem->SetEnchantment(PERM_ENCHANTMENT_SLOT, enchantID, 0, 0);

		// Add new enchant
		pPlayer->ApplyEnchantment(pItem, PERM_ENCHANTMENT_SLOT, true);
		pPlayer->GetSession()->SendNotification("Your %s has now been enchanted!", pItem->GetProto()->Name1);
	}

	// GossipHello
	bool OnGossipHello(Player * pPlayer, Creature * pCreature)
	{
		if (pPlayer->isInCombat() || pPlayer->HasInvisibilityAura() || pPlayer->HasStealthAura())
		{
			SEND_NOTIFICATION("I don't want to talk to you while you're in combat or invisible!");
			GOSSIP_CLOSE();
			return true;
		}

		GOSSIP_ITEM(MI_WNG, C_BLK"[Travel]",													SEND_MAIN, PG_TRAVEL);
		GOSSIP_ITEM(MI_BOK, C_BLK"[Trainers]",													SEND_MAIN, PG_TRAIN);
		GOSSIP_ITEM(MI_BOK, C_BLK"[Professions]",												SEND_MAIN, PG_PROF);
		GOSSIP_ITEM(MI_TBD, C_BLK"[Vendors]",													SEND_MAIN, PG_VENDOR);
		GOSSIP_ITEM(MI_PVP, C_BLK"[Enchantments]",												SEND_MAIN, PG_ENCHANT);
		GOSSIP_ITEM(MI_WL1, C_BLK"[Support]",													SEND_MAIN, PG_SUPPORT);

		GOSSIP_MENU(66600, pCreature->GetGUID());
		return true;
	}

	// GossipSelect
	bool OnGossipSelect(Player * pPlayer, Creature * pCreature, uint32 iSender, uint32 iAction)
	{
		if (pPlayer->isInCombat() || pPlayer->HasInvisibilityAura() || pPlayer->HasStealthAura())
		{
			SEND_NOTIFICATION("I don't want to talk to you while you're in combat or invisible!");
			GOSSIP_CLOSE();
			return true;
		}

		pPlayer->PlayerTalkClass->GetGossipMenu().ClearMenu();

		// Pages accessed via Main Menu
		if (iSender == SEND_MAIN)
		{
			if (iAction != PG_MAIN)
				GOSSIP_ITEM(MI_CHT, C_WHT"[Back]",												SEND_MAIN, PG_MAIN);

			if (iAction == PG_MAIN)			// Return to Main Page
				return OnGossipHello(pPlayer, pCreature);

			if (iAction == PG_TRAVEL)		// Travel Page
			{
				GOSSIP_ITEM(MI_WNG, C_BLK"[City Travel]",										SEND_TRAVEL, PG_CITY_T);
				GOSSIP_ITEM(MI_WNG, C_BLK"[Town Travel]",										SEND_TRAVEL, PG_TOWN_T);
				GOSSIP_ITEM(MI_WNG, C_BLK"[PvP Travel]",										SEND_TRAVEL, PG_PVP_T);
				GOSSIP_ITEM(MI_WNG, C_BLK"[Dungeons And Raids]",								SEND_TRAVEL, PG_D_AND_R);
			}

			if (iAction == PG_TRAIN)		// Trainers Page
			{
				GOSSIP_ITEX(MI_BOK, C_BLK"[Learn Spells]",										SEND_TRAIN, 0, "Are you sure you want to learn all spells?", 0);
				GOSSIP_ITEX(MI_BOK, C_BLK"[Learn Dual Spec]",									SEND_TRAIN, 1, "Are you sure you want to learn dual spec?", 0);
				GOSSIP_ITEX(MI_BOK, C_BLK"[Learn Riding]",										SEND_TRAIN, 2, "Are you sure you want to learn riding?", 0);
				GOSSIP_ITEX(MI_BOK, C_BLK"[Reset Talents]",										SEND_TRAIN, 3, "Are you sure you want to reset your talents?", 0);
				GOSSIP_ITEX(MI_BOK, C_BLK"[Reset Spells]",										SEND_TRAIN, 4, "Are you sure you want to reset your spells?", 0);
			}

			if (iAction == PG_PROF)			// Professions Page
			{
				GOSSIP_ITEM(MI_WL1, C_BLK"[Learn Profession]",									SEND_PROF_PG, PG_PROF_L);
				GOSSIP_ITEM(MI_WL1, C_BLK"[Learn Secondary Skill]",								SEND_PROF_PG, PG_SESK_L);
				GOSSIP_ITEM(MI_WL1, C_BLK"[Unlearn Profession]",								SEND_PROF_PG, PG_PROF_U);
				GOSSIP_ITEM(MI_WL1, C_BLK"[Unlearn Secondary Skill]",							SEND_PROF_PG, PG_SESK_U);
			}

			if (iAction == PG_VENDOR)		// Vendors Page
			{
				GOSSIP_ITEM(MI_PVP, C_BLK"[Weapons]",											SEND_TE_VEND, 0);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Armor]",												SEND_TE_VEND, 1);
				GOSSIP_ITEM(MI_CBG, C_BLK"[Gems]",												SEND_TE_VEND, 2);
				GOSSIP_ITEM(MI_CBG, C_BLK"[Glyphs]",											SEND_TE_VEND, 3);
				GOSSIP_ITEM(MI_WL1, C_BLK"[Consumables]",										SEND_TE_VEND, 4);
				GOSSIP_ITEM(MI_BAG, C_BLK"[Trade Goods]",										SEND_TE_VEND, 5);
				if (pPlayer->getClass() == CLASS_HUNTER)
					GOSSIP_ITEM(MI_WNG, C_BLK"[Hunter Pets]",									SEND_TE_VEND, 6);
			}

			if (iAction == PG_ENCHANT)		// Enchantments Page
			{
				GOSSIP_ITEM(MI_PVP, C_BLK"[Enchant 1H Weapon]",									SEND_ENCH_PG, PG_ENCH_1H);
				GOSSIP_ITEM(MI_PVP, C_BLK"[Enchant 2H Weapon]",									SEND_ENCH_PG, PG_ENCH_2H);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Bracers]",									SEND_ENCH_PG, PG_ENCH_BR);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Chest]",										SEND_ENCH_PG, PG_ENCH_CH);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Cloak]",										SEND_ENCH_PG, PG_ENCH_CL);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Feet]",										SEND_ENCH_PG, PG_ENCH_FT);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Gloves]",									SEND_ENCH_PG, PG_ENCH_GL);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Head]",										SEND_ENCH_PG, PG_ENCH_HE);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Legs]",										SEND_ENCH_PG, PG_ENCH_LG);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Rings]",										SEND_ENCH_PG, PG_ENCH_RN);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Shield]",									SEND_ENCH_PG, PG_ENCH_SH);
				GOSSIP_ITEM(MI_TBD, C_BLK"[Enchant Shoulders]",									SEND_ENCH_PG, PG_ENCH_SO);
			}

			if (iAction == PG_SUPPORT)		// Support Page
			{
				GOSSIP_ITEM(MI_WL1, C_BLK"[Repair Items]",										SEND_SUPPORT, 0);
				GOSSIP_ITEM(MI_WNG, C_BLK"[Explore World]",										SEND_SUPPORT, 1);
			}

			GOSSIP_MENU(66600, pCreature->GetGUID());
		}

		/*
		Teleport
		=================================================================================================================================================================
		=================================================================================================================================================================
		=================================================================================================================================================================
		*/

		// City Teleport
		if (iSender == SEND_TE_CITY)
		{
			GOSSIP_CLOSE();

			TELEPORT_TO(travelCity[iAction].map, travelCity[iAction].posx, travelCity[iAction].posy, travelCity[iAction].posz, travelCity[iAction].poso);
		}

		// Azeroth Towns Teleport
		if (iSender == SEND_TE_T_AZ)
		{
			GOSSIP_CLOSE();
			
			TELEPORT_TO(townAZ[iAction].map, townAZ[iAction].posx, townAZ[iAction].posy, townAZ[iAction].posz, townAZ[iAction].poso);
		}

		// Outland Towns Teleport
		if (iSender == SEND_TE_T_OL)
		{
			GOSSIP_CLOSE();
			
			TELEPORT_TO(townOL[iAction].map, townOL[iAction].posx, townOL[iAction].posy, townOL[iAction].posz, townOL[iAction].poso);
		}

		// Northrend Towns Teleport
		if (iSender == SEND_TE_T_NR)
		{
			GOSSIP_CLOSE();
			
			TELEPORT_TO(townNR[iAction].map, townNR[iAction].posx, townNR[iAction].posy, townNR[iAction].posz, townNR[iAction].poso);
		}

		// Azeroth Dungeons Teleport
		if (iSender == SEND_TE_D_AZ)
		{
			GOSSIP_CLOSE();
			
			TELEPORT_TO(dungAZ[iAction].map, dungAZ[iAction].posx, dungAZ[iAction].posy, dungAZ[iAction].posz, dungAZ[iAction].poso);
		}

		// Outland Dungeons Teleport
		if (iSender == SEND_TE_D_OL)
		{
			GOSSIP_CLOSE();
			
			TELEPORT_TO(dungOL[iAction].map, dungOL[iAction].posx, dungOL[iAction].posy, dungOL[iAction].posz, dungOL[iAction].poso);
		}

		// Northrend Dungeons Teleport
		if (iSender == SEND_TE_D_NR)
		{
			GOSSIP_CLOSE();
			
			TELEPORT_TO(dungNR[iAction].map, dungNR[iAction].posx, dungNR[iAction].posy, dungNR[iAction].posz, dungNR[iAction].poso);
		}

		// PvP Teleport
		if (iSender == SEND_TE_PVP)
		{
			GOSSIP_CLOSE();
			
			TELEPORT_TO(travelPVP[iAction].map, travelPVP[iAction].posx, travelPVP[iAction].posy, travelPVP[iAction].posz, travelPVP[iAction].poso);
		}

		// Vendors Teleport
		if (iSender == SEND_TE_VEND)
		{
			GOSSIP_CLOSE();
			
			TELEPORT_TO(travelVend[iAction].map, travelVend[iAction].posx, travelVend[iAction].posy, travelVend[iAction].posz, travelVend[iAction].poso);
		}

		/*
		Trainers
		=================================================================================================================================================================
		=================================================================================================================================================================
		=================================================================================================================================================================
		*/

		if (iSender == SEND_TRAIN)
		{
			switch (iAction)
			{
			case 0:		// Learn Spells
				{
					uint32 sID = 0;
					bool learnStatus = false;

					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_WARRIOR)
					{
						// Default Spells
						for (sID; sID < 42; sID++)
						{
							if (!pPlayer->HasSpell(spellsWarrior[sID]))
							{
								pPlayer->learnSpell(spellsWarrior[sID], false);
								learnStatus = true;
							}
						}
						// Arms Talent Spells
						if (pPlayer->HasTalent(12294, pPlayer->GetActiveSpec()))	// Mortal Strike
						{
							if (!pPlayer->HasSpell(47486))
							{
								pPlayer->learnSpell(47486, false);
								learnStatus = true;
							}
						}
						// Protection Talent Spells
						if (pPlayer->HasTalent(20243, pPlayer->GetActiveSpec()))	// Devastate
						{
							if (!pPlayer->HasSpell(47498))
							{
								pPlayer->learnSpell(47498, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_PALADIN)
					{
						// Default Spells
						for (sID; sID < 49; sID++)
						{
							if (!pPlayer->HasSpell(spellsPaladin[sID]))
							{
								pPlayer->learnSpell(spellsPaladin[sID], false);
								learnStatus = true;
							}
						}
						// Horde Specific Spells
						if (PLAYER_TEAM() == HORDE)
						{
							if (!pPlayer->HasSpell(53736))	// Seal Of Corruption
							{
								pPlayer->learnSpell(53736, false);
								learnStatus = true;
							}
							if (!pPlayer->HasSpell(34769))	// Summon Warhorse
							{
								pPlayer->learnSpell(34769, false);
								learnStatus = true;
							}
							if (!pPlayer->HasSpell(34767))	// Summon Charger
							{
								pPlayer->learnSpell(34767, false);
								learnStatus = true;
							}
						}
						// Alliance Specific Spells
						if (PLAYER_TEAM() == ALLIANCE)
						{
							if (!pPlayer->HasSpell(31801))	// Seal Of Vengeance
							{
								pPlayer->learnSpell(31801, false);
								learnStatus = true;
							}
							if (!pPlayer->HasSpell(13819))	// Warhorse
							{
								pPlayer->learnSpell(13819, false);
								learnStatus = true;
							}
							if (!pPlayer->HasSpell(23214))	// Charger
							{
								pPlayer->learnSpell(23214, false);
								learnStatus = true;
							}
						}
						// Holy Talent Spells
						if (pPlayer->HasTalent(20473, pPlayer->GetActiveSpec()))	// Holy Shock
						{
							if (!pPlayer->HasSpell(48825))
							{
								pPlayer->learnSpell(48825, false);
								learnStatus = true;
							}
						}
						// Protection Talent Spells
						if (pPlayer->HasTalent(20925, pPlayer->GetActiveSpec()))	// Holy Shield
						{
							if (!pPlayer->HasSpell(48952))
							{
								pPlayer->learnSpell(48952, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(31935, pPlayer->GetActiveSpec()))	// Avenger's Shield
						{
							if (!pPlayer->HasSpell(48827))
							{
								pPlayer->learnSpell(48827, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(20911, pPlayer->GetActiveSpec()))	// Blessing Of Sanctuary
						{
							if (!pPlayer->HasSpell(25899))
							{
								pPlayer->learnSpell(25899, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_HUNTER)
					{
						// Default Spells
						for (sID; sID < 59; sID++)
						{
							if (!pPlayer->HasSpell(spellsHunter[sID]))
							{
								pPlayer->learnSpell(spellsHunter[sID], false);
								learnStatus = true;
							}
						}
						// Marksmenship Talent Spells
						if (pPlayer->HasTalent(19434, pPlayer->GetActiveSpec()))	// Aimed Shot
						{
							if (!pPlayer->HasSpell(49050))
							{
								pPlayer->learnSpell(49050, false);
								learnStatus = true;
							}
						}
						// Survival Talent Spells
						if (pPlayer->HasTalent(19306, pPlayer->GetActiveSpec()))	// Counterattack
						{
							if (!pPlayer->HasSpell(48999))
							{
								pPlayer->learnSpell(48999, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(3674, pPlayer->GetActiveSpec()))		// Black Arrow
						{
							if (!pPlayer->HasSpell(63672))
							{
								pPlayer->learnSpell(63672, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(53301, pPlayer->GetActiveSpec()))	// Explosive Shot
						{
							if (!pPlayer->HasSpell(60053))
							{
								pPlayer->learnSpell(60053, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(19386, pPlayer->GetActiveSpec()))	// Wyvern Sting
						{
							if (!pPlayer->HasSpell(49012))
							{
								pPlayer->learnSpell(49012, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_ROGUE)
					{
						// Default Spells
						for (sID; sID < 33; sID++)
						{
							if (!pPlayer->HasSpell(spellsRogue[sID]))
							{
								pPlayer->learnSpell(spellsRogue[sID], false);
								learnStatus = true;
							}
						}
						// Assassination Talent Spells
						if (pPlayer->HasTalent(1329, pPlayer->GetActiveSpec()))		// Mutilate
						{
							if (!pPlayer->HasSpell(48666))
							{
								pPlayer->learnSpell(48666, false);
								learnStatus = true;
							}
						}
						// Subtlety Talent Spells
						if (pPlayer->HasTalent(16511, pPlayer->GetActiveSpec()))	// Hemorrhage
						{
							if (!pPlayer->HasSpell(48660))
							{
								pPlayer->learnSpell(48660, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_PRIEST)
					{
						// Default Spells
						for (sID; sID < 41; sID++)
						{
							if (!pPlayer->HasSpell(spellsPriest[sID]))
							{
								pPlayer->learnSpell(spellsPriest[sID], false);
								learnStatus = true;
							}
						}
						// Discipline Talent Spells
						if (pPlayer->HasTalent(47540, pPlayer->GetActiveSpec()))	// Penance
						{
							if (!pPlayer->HasSpell(53007))
							{
								pPlayer->learnSpell(53007, false);
								learnStatus = true;
							}
						}
						// Holy Talent Spells
						if (pPlayer->HasTalent(724, pPlayer->GetActiveSpec()))		// Lightwell
						{
							if (!pPlayer->HasSpell(48087))
							{
								pPlayer->learnSpell(48087, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(19236, pPlayer->GetActiveSpec()))	// Desperate Prayer
						{
							if (!pPlayer->HasSpell(48173))
							{
								pPlayer->learnSpell(48173, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(34861, pPlayer->GetActiveSpec()))	// Circle Of Healing
						{
							if (!pPlayer->HasSpell(48089))
							{
								pPlayer->learnSpell(48089, false);
								learnStatus = true;
							}
						}
						// Shadow Magic Talent Spells
						if (pPlayer->HasTalent(15407, pPlayer->GetActiveSpec()))	// Mind Flay
						{
							if (!pPlayer->HasSpell(48156))
							{
								pPlayer->learnSpell(48156, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(34194, pPlayer->GetActiveSpec()))	// Vampiric Touch
						{
							if (!pPlayer->HasSpell(48160))
							{
								pPlayer->learnSpell(48160, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_DEATH_KNIGHT)
					{
						// Default Spells
						for (sID; sID < 39; sID++)
						{
							if (!pPlayer->HasSpell(spellsDeathKnight[sID]))
							{
								pPlayer->learnSpell(spellsDeathKnight[sID], false);
								learnStatus = true;
							}
						}
						// Blood Talent Spells
						if (pPlayer->HasTalent(55050, pPlayer->GetActiveSpec()))	// Heart Strike
						{
							if (!pPlayer->HasSpell(48160))
							{
								pPlayer->learnSpell(48160, false);
								learnStatus = true;
							}
						}
						// Frost Talent Spells
						if (pPlayer->HasTalent(49143, pPlayer->GetActiveSpec()))	// Frost Strike
						{
							if (!pPlayer->HasSpell(55268))
							{
								pPlayer->learnSpell(55268, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(49184, pPlayer->GetActiveSpec()))	// Howling Blast
						{
							if (!pPlayer->HasSpell(51411))
							{
								pPlayer->learnSpell(51411, false);
								learnStatus = true;
							}
						}
						// Unholy Talent Spells
						if (pPlayer->HasTalent(48158, pPlayer->GetActiveSpec()))	// Corpse Explosion
						{
							if (!pPlayer->HasSpell(51328))
							{
								pPlayer->learnSpell(51328, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(55090, pPlayer->GetActiveSpec()))	// Scourge Strike
						{
							if (!pPlayer->HasSpell(55271))
							{
								pPlayer->learnSpell(55271, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_SHAMAN)
					{
						// Default Spells
						for (sID; sID < 53; sID++)
						{
							if (!pPlayer->HasSpell(spellsShaman[sID]))
							{
								pPlayer->learnSpell(spellsShaman[sID], false);
								learnStatus = true;
							}
						}
						// Elemental Combat Talent Spells
						if (pPlayer->HasTalent(51490, pPlayer->GetActiveSpec()))	// Thunderstorm
						{
							if (!pPlayer->HasSpell(59159))
							{
								pPlayer->learnSpell(59159, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(30706, pPlayer->GetActiveSpec()))	// Totem Of Wrath
						{
							if (!pPlayer->HasSpell(57722))
							{
								pPlayer->learnSpell(57722, false);
								learnStatus = true;
							}
						}
						// Restoration Talent Spells
						if (pPlayer->HasTalent(61295, pPlayer->GetActiveSpec()))	// Riptide
						{
							if (!pPlayer->HasSpell(61301))
							{
								pPlayer->learnSpell(61301, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(974, pPlayer->GetActiveSpec()))		// Earth Shield
						{
							if (!pPlayer->HasSpell(49284))
							{
								pPlayer->learnSpell(49284, false);
								learnStatus = true;
							}
						}
						// Horde Specific Spells
						if (PLAYER_TEAM() == HORDE)
						{
							if (!pPlayer->HasSpell(2825))	// Bloodlust
							{
								pPlayer->learnSpell(2825, false);
								learnStatus = true;
							}
						}
						// Alliance Specific Spells
						if (PLAYER_TEAM() == ALLIANCE)
						{
							if (!pPlayer->HasSpell(32182))	// Heroism
							{
								pPlayer->learnSpell(32182, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_MAGE)
					{
						// Default Spells
						for (sID; sID < 48; sID++)
						{
							if (!pPlayer->HasSpell(spellsMage[sID]))
							{
								pPlayer->learnSpell(spellsMage[sID], false);
								learnStatus = true;
							}
						}
						// Horde Specific Spells
						if (PLAYER_TEAM() == HORDE)
						{
							for (sID; sID < 12; sID++)
							{
								if (!pPlayer->HasSpell(spellsMageTeleH[sID]))
								{
									pPlayer->learnSpell(spellsMageTeleH[sID], false);
									learnStatus = true;
								}
							}
						}
						// Alliance Specific Spells
						if (PLAYER_TEAM() == ALLIANCE)
						{
							for (sID; sID < 12; sID++)
							{
								if (!pPlayer->HasSpell(spellsMageTeleA[sID]))
								{
									pPlayer->learnSpell(spellsMageTeleA[sID], false);
									learnStatus = true;
								}
							}
						}
						// Arcane Talent Spells
						if (pPlayer->HasTalent(44425, pPlayer->GetActiveSpec()))	// Arcane Barrage
						{
							if (!pPlayer->HasSpell(44781))
							{
								pPlayer->learnSpell(44781, false);
								learnStatus = true;
							}
						}
						// Fire Talent Spells
						if (pPlayer->HasTalent(44457, pPlayer->GetActiveSpec()))	// Living Bomb
						{
							if (!pPlayer->HasSpell(55360))
							{
								pPlayer->learnSpell(55360, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(31661, pPlayer->GetActiveSpec()))	// Dragon's Breath
						{
							if (!pPlayer->HasSpell(42950))
							{
								pPlayer->learnSpell(42950, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(11113, pPlayer->GetActiveSpec()))	// Blast Wave
						{
							if (!pPlayer->HasSpell(42945))
							{
								pPlayer->learnSpell(42945, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(11366, pPlayer->GetActiveSpec()))	// Pyroblast
						{
							if (!pPlayer->HasSpell(42891))
							{
								pPlayer->learnSpell(42891, false);
								learnStatus = true;
							}
						}
						// Frost Talent Spells
						if (pPlayer->HasTalent(11426, pPlayer->GetActiveSpec()))	// Ice Barrier
						{
							if (!pPlayer->HasSpell(43039))
							{
								pPlayer->learnSpell(43039, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_WARLOCK)
					{
						// Default Spells
						for (sID; sID < 48; sID++)
						{
							if (!pPlayer->HasSpell(spellsWarlock[sID]))
							{
								pPlayer->learnSpell(spellsWarlock[sID], false);
								learnStatus = true;
							}
						}
						// Affliction Talent Spells
						if (pPlayer->HasTalent(30108, pPlayer->GetActiveSpec()))	// Unstable Affliction
						{
							if (!pPlayer->HasSpell(47843))
							{
								pPlayer->learnSpell(47843, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(47181, pPlayer->GetActiveSpec()))	// Haunt
						{
							if (!pPlayer->HasSpell(59164))
							{
								pPlayer->learnSpell(59164, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(18220, pPlayer->GetActiveSpec()))	// Dark Pact
						{
							if (!pPlayer->HasSpell(59092))
							{
								pPlayer->learnSpell(59092, false);
								learnStatus = true;
							}
						}
						// Destruction Talent Spells
						if (pPlayer->HasTalent(30283, pPlayer->GetActiveSpec()))	// Shadowfury
						{
							if (!pPlayer->HasSpell(47847))
							{
								pPlayer->learnSpell(47847, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(17877, pPlayer->GetActiveSpec()))	// Shadowburn
						{
							if (!pPlayer->HasSpell(47827))
							{
								pPlayer->learnSpell(47827, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(50796, pPlayer->GetActiveSpec()))	// Chaos Bolt
						{
							if (!pPlayer->HasSpell(59172))
							{
								pPlayer->learnSpell(59172, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================
					if (pPlayer->getClass() == CLASS_DRUID)
					{
						// Default Spells
						for (sID; sID < 57; sID++)
						{
							if (!pPlayer->HasSpell(spellsDruid[sID]))
							{
								pPlayer->learnSpell(spellsDruid[sID], false);
								learnStatus = true;
							}
						}
						// Balance Talent Spells
						if (pPlayer->HasTalent(5570, pPlayer->GetActiveSpec()))		// Insect Swarm
						{
							if (!pPlayer->HasSpell(48468))
							{
								pPlayer->learnSpell(48468, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(50516, pPlayer->GetActiveSpec()))	// Typhoon
						{
							if (!pPlayer->HasSpell(61384))
							{
								pPlayer->learnSpell(61384, false);
								learnStatus = true;
							}
						}
						if (pPlayer->HasTalent(48505, pPlayer->GetActiveSpec()))	// Starfall
						{
							if (!pPlayer->HasSpell(53201))
							{
								pPlayer->learnSpell(53201, false);
								learnStatus = true;
							}
						}
						// Feral Combat Talent Spells
						if (pPlayer->HasTalent(33917, pPlayer->GetActiveSpec()))	// Mangle
						{
							if (!pPlayer->HasSpell(48564))
							{
								pPlayer->learnSpell(48564, false);
								learnStatus = true;
							}
							if (!pPlayer->HasSpell(48566))
							{
								pPlayer->learnSpell(48566, false);
								learnStatus = true;
							}
						}
						// Restoration Talent Spells
						if (pPlayer->HasTalent(48438, pPlayer->GetActiveSpec()))	// Wild Growth
						{
							if (!pPlayer->HasSpell(53251))
							{
								pPlayer->learnSpell(53251, false);
								learnStatus = true;
							}
						}
					}
					// ==================================================================================================================================================

					if (learnStatus)
						SEND_NOTIFICATION("You have now learned all spells!");
					else SEND_NOTIFICATION("You already know all spells!");
				}
				break;

			case 1:		// Learn Dual Spec
				{
					bool learnStatus = false;

					if (!pPlayer->HasSpell(63644) || !pPlayer->HasSpell(63645))
					{
						pPlayer->CastSpell(pPlayer, 63680, true, NULL, NULL, pPlayer->GetGUID());
						pPlayer->CastSpell(pPlayer, 63624, true, NULL, NULL, pPlayer->GetGUID());
						learnStatus = true;
					}

					if (learnStatus)
						SEND_NOTIFICATION("You have now learned dual spec!");
					else SEND_NOTIFICATION("You already know dual spec!");
				}
				break;

			case 2:		// Learn Riding
				{
					uint32 learnStatus = false;

					if (!pPlayer->HasSpell(34091))
					{
						pPlayer->learnSpell(34091, false);
						learnStatus = true;
					}
					if (!pPlayer->HasSpell(54197))
					{
						pPlayer->learnSpell(54197, false);
						learnStatus = true;
					}

					if (learnStatus)
						SEND_NOTIFICATION("You have now learned riding!");
					else SEND_NOTIFICATION("You already know riding!");
				}
				break;

			case 3:		// Reset Talents
				{
					pPlayer->resetTalents(true);
					SEND_NOTIFICATION("Your talents have been reset!");
				}
				break;

			case 4:		// Reset Spells
				{
					pPlayer->resetSpells();
					pPlayer->SendTalentsInfoData(false);
					SEND_NOTIFICATION("Your spells have been reset!");
				}
				break;
			}

			return OnGossipHello(pPlayer, pCreature);
		}

		// Support
		if (iSender == SEND_SUPPORT)
		{
			switch (iAction)
			{
			case 0:		// Repair Items
				{
					pPlayer->DurabilityRepairAll(false, 0.0f, false);
					SEND_NOTIFICATION("Your items have been repaired!");
				}
				break;

			case 1:		// Explore World
				{
					for (uint8 i = 0; i < 128; i++)
						pPlayer->SetFlag(PLAYER_EXPLORED_ZONES_1+i, 0xFFFFFFFF);

					SEND_NOTIFICATION("You have now explored the world!");
				}
				break;
			}

			return OnGossipHello(pPlayer, pCreature);
		}

		/*
		Professions
		=================================================================================================================================================================
		=================================================================================================================================================================
		=================================================================================================================================================================
		*/

		if (iSender == SEND_PROF_PG)
		{
			GOSSIP_ITEM(MI_CHT, C_WHT"[Back]",													SEND_MAIN, PG_PROF);

			if (iAction == PG_PROF_L)
			{
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Alchemy]",										SEND_PROF, 0, "Are you sure you want to learn Alchemy?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Blacksmithing]",								SEND_PROF, 1, "Are you sure you want to learn Blacksmithing?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Enchanting]",									SEND_PROF, 2, "Are you sure you want to learn Enchanting?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Engineering]",									SEND_PROF, 3, "Are you sure you want to learn Engineering?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Herbalism]",									SEND_PROF, 4, "Are you sure you want to learn Herbalism?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Inscription]",									SEND_PROF, 5, "Are you sure you want to learn Inscription?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Jewelcrafting]",								SEND_PROF, 6, "Are you sure you want to learn Jewelcrafting?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Leatherworking]",								SEND_PROF, 7, "Are you sure you want to learn Leatherworking?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Mining]",										SEND_PROF, 8, "Are you sure you want to learn Mining?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Skinning]",									SEND_PROF, 9, "Are you sure you want to learn Skinning?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Tailoring]",									SEND_PROF, 10, "Are you sure you want to learn Tailoring?", 0);
			}

			if (iAction == PG_SESK_L)
			{
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Cooking]",										SEND_PROF, 11, "Are you sure you want to learn Cooking?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn First Aid]",									SEND_PROF, 12, "Are you sure you want to learn First Aid?", 0);
				GOSSIP_ITEX(MI_BOK, C_GRN"[Learn Fishing]",										SEND_PROF, 13, "Are you sure you want to learn Fishing?", 0);
			}

			if (iAction == PG_PROF_U)
			{
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Alchemy]",									SEND_PROF, 14, "Are you sure you want to unlearn Alchemy?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Blacksmithing]",								SEND_PROF, 15, "Are you sure you want to unlearn Blacksmithing?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Enchanting]",								SEND_PROF, 16, "Are you sure you want to unlearn Enchanting?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Engineering]",								SEND_PROF, 17, "Are you sure you want to unlearn Engineering?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Herbalism]",									SEND_PROF, 18, "Are you sure you want to unlearn Herbalism?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Inscription]",								SEND_PROF, 19, "Are you sure you want to unlearn Inscription?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Jewelcrafting]",								SEND_PROF, 20, "Are you sure you want to unlearn Jewelcrafting?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Leatherworking]",							SEND_PROF, 21, "Are you sure you want to unlearn Leatherworking?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Mining]",									SEND_PROF, 22, "Are you sure you want to unlearn Mining?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Skinning]",									SEND_PROF, 23, "Are you sure you want to unlearn Skinning?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Tailoring]",									SEND_PROF, 24, "Are you sure you want to unlearn Tailoring?", 0);
				GOSSIP_ITEX(MI_WL1, C_RED"[Unlearn All Professions]",							SEND_PROF, 28, "Are you sure you want to unlearn all professions?", 0);
			}

			if (iAction == PG_SESK_U)
			{
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Cooking]",									SEND_PROF, 25, "Are you sure you want to unlearn Cooking?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn First Aid]",									SEND_PROF, 26, "Are you sure you want to unlearn First Aid?", 0);
				GOSSIP_ITEX(MI_BOK, C_RED"[Unlearn Fishing]",									SEND_PROF, 27, "Are you sure you want to unlearn Fishing?", 0);
				GOSSIP_ITEX(MI_WL1, C_RED"[Unlearn All Secondary Skills]",						SEND_PROF, 29, "Are you sure you want to unlearn all secondary skills?", 0);
			}

			GOSSIP_MENU(66600, pCreature->GetGUID());
		}

		if (iSender == SEND_PROF)
		{
			// Learn Profession or Secondary Skill
			if (iAction >= 0 && iAction <= 13)
			{
				bool learnStatus = true;
				int professionCount = 0;

				// If player has 2 professions, don't allow further learning
				if (iAction >= 0 && iAction < 11)
				{
					for (uint32 sID = 0; sID < 11; sID++)
						if (pPlayer->HasSpell(professionID[sID]))
							professionCount++;

					if (professionCount >= 2)
					{
						SEND_NOTIFICATION("You already know two professions!");
						return OnGossipHello(pPlayer, pCreature);
					}
				}

				if (iAction == 0)	// Alchemy
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know Alchemy!");
					}
					else SEND_NOTIFICATION("You have now learned Alchemy!");
				}
				if (iAction == 1)	// Blacksmithing
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know Alchemy!");
					}
					else SEND_NOTIFICATION("You have now learned Alchemy!");
				}
				if (iAction == 2)	// Enchanting
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know Enchanting!");
					}
					else SEND_NOTIFICATION("You have now learned Enchanting!");
				}
				if (iAction == 3)	// Engineering
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know Engineering!");
					}
					else SEND_NOTIFICATION("You have now learned Engineering!");
				}
				if (iAction == 4)	// Herbalism
				{
					learnStatus = false;

					if (pPlayer->HasSpell(professionID[iAction]))
						SEND_NOTIFICATION("You already know Herbalism!");
					else
					{
						pPlayer->learnSpell(50300, false);
						pPlayer->SetSkill(182, pPlayer->GetSkillStep(182), 450, 450);
						SEND_NOTIFICATION("You have now learned Herbalism!");
					}
				}
				if (iAction == 5)	// Inscription
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know Inscription!");
					}
					else SEND_NOTIFICATION("You have now learned Inscription!");
				}
				if (iAction == 6)	// Jewelcrafting
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know Jewelcrafting!");
					}
					else SEND_NOTIFICATION("You have now learned Jewelcrafting!");
				}
				if (iAction == 7)	// Leatherworking
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know Leatherworking!");
					}
					else SEND_NOTIFICATION("You have now learned Leatherworking!");
				}
				if (iAction == 8)	// Mining
				{
					learnStatus = false;

					if (pPlayer->HasSpell(professionID[iAction]))
						SEND_NOTIFICATION("You already know Mining!");
					else
					{
						pPlayer->learnSpell(50310, false);
						pPlayer->SetSkill(186, pPlayer->GetSkillStep(186), 450, 450);
						SEND_NOTIFICATION("You have now learned Mining!");
					}
				}
				if (iAction == 9)	// Skinning
				{
					learnStatus = false;

					if (pPlayer->HasSpell(professionID[iAction]))
						SEND_NOTIFICATION("You already know Skinning!");
					else
					{
						pPlayer->learnSpell(50305, false);
						pPlayer->SetSkill(393, pPlayer->GetSkillStep(393), 450, 450);
						SEND_NOTIFICATION("You have now learned Skinning!");
					}
				}
				if (iAction == 10)	// Tailoring
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know Tailoring!");
					}
					else SEND_NOTIFICATION("You have now learned Tailoring!");
				}
				if (iAction == 11)	// Cooking
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know Cooking!");
					}
					else SEND_NOTIFICATION("You have now learned Cooking!");
				}
				if (iAction == 12)	// First Aid
				{
					if (pPlayer->HasSpell(professionID[iAction]))
					{
						learnStatus = false;
						SEND_NOTIFICATION("You already know First Aid!");
					}
					else SEND_NOTIFICATION("You have now learned First Aid!");
				}
				if (iAction == 13)	// Fishing
				{
					learnStatus = false;

					if (pPlayer->HasSpell(professionID[iAction]))
						SEND_NOTIFICATION("You already know Fishing!");
					else
					{
						pPlayer->learnSpell(51294, false);
						pPlayer->SetSkill(356, pPlayer->GetSkillStep(356), 450, 450);
						SEND_NOTIFICATION("You have now learned Fishing!");
					}
				}

				if (learnStatus) LearnProfession(pPlayer, iAction);
			}

			// Unlearn Profession or Secondary Skill
			if (iAction >= 14 && iAction <= 27)
			{
				bool unlearnStatus = true;

				if (iAction == 14)	// Alchemy
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Alchemy!");
					}
					else SEND_NOTIFICATION("You have now unlearned Alchemy!");
				}
				if (iAction == 15)	// Blacksmithing
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Blacksmithing!");
					}
					else SEND_NOTIFICATION("You have now unlearned Blacksmithing!");
				}
				if (iAction == 16)	// Enchanting
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Enchanting!");
					}
					else SEND_NOTIFICATION("You have now unlearned Enchanting!");
				}
				if (iAction == 17)	// Engineering
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Engineering!");
					}
					else SEND_NOTIFICATION("You have now unlearned Engineering!");
				}
				if (iAction == 18)	// Herbalism
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Herbalism!");
					}
					else SEND_NOTIFICATION("You have now unlearned Herbalism!");
				}
				if (iAction == 19)	// Inscription
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Inscription!");
					}
					else SEND_NOTIFICATION("You have now unlearned Inscription!");
				}
				if (iAction == 20)	// Jewelcrafting
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Jewelcrafting!");
					}
					else SEND_NOTIFICATION("You have now unlearned Jewelcrafting!");
				}
				if (iAction == 21)	// Leatherworking
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Leatherworking!");
					}
					else SEND_NOTIFICATION("You have now unlearned Leatherworking!");
				}
				if (iAction == 22)	// Mining
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Mining!");
					}
					else SEND_NOTIFICATION("You have now unlearned Mining!");
				}
				if (iAction == 23)	// Skinning
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Skinning!");
					}
					else SEND_NOTIFICATION("You have now unlearned Skinning!");
				}
				if (iAction == 24)	// Tailoring
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Tailoring!");
					}
					else SEND_NOTIFICATION("You have now unlearned Tailoring!");
				}
				if (iAction == 25)	// Cooking
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Cooking!");
					}
					else SEND_NOTIFICATION("You have now unlearned Cooking!");
				}
				if (iAction == 26)	// First Aid
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know First Aid!");
					}
					else SEND_NOTIFICATION("You have now unlearned First Aid!");
				}
				if (iAction == 27)	// Fishing
				{
					if (!pPlayer->HasSpell(professionID[iAction-14]))
					{
						unlearnStatus = false;
						SEND_NOTIFICATION("You don't know Fishing!");
					}
					else SEND_NOTIFICATION("You have now unlearned Fishing!");
				}

				if (unlearnStatus) pPlayer->removeSpell(professionID[iAction-14], false, false);
			}

			if (iAction == 28)
			{
				bool unlearnStatus = false;

				for (uint32 sID = 0; sID < 11; sID++)
				{
					if (pPlayer->HasSpell(professionID[sID]))
					{
						pPlayer->removeSpell(professionID[sID], false, false);
						unlearnStatus = true;
					}
				}

				if (unlearnStatus)
					SEND_NOTIFICATION("You have now unlearned all professions!");
				else SEND_NOTIFICATION("You don't know any profession!");
			}

			if (iAction == 29)
			{
				bool unlearnStatus = false;

				for (uint32 sID = 11; sID < 14; sID++)
				{
					if (pPlayer->HasSpell(professionID[sID]))
					{
						pPlayer->removeSpell(professionID[sID], false, false);
						unlearnStatus = true;
					}
				}

				if (unlearnStatus)
					SEND_NOTIFICATION("You have now unlearned all secondary skills!");
				else SEND_NOTIFICATION("You don't know any secondary skill!");
			}

			return OnGossipHello(pPlayer, pCreature);
		}

		/*
		Enchantments
		=================================================================================================================================================================
		=================================================================================================================================================================
		=================================================================================================================================================================
		*/

		// Enchantment Pages
		if (iSender == SEND_ENCH_PG)
		{
			GOSSIP_ITEM(MI_CHT, C_WHT"[Back]",													SEND_MAIN, PG_ENCHANT);

			switch (iAction)
			{
			case PG_ENCH_1H:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Accuracy]",										SEND_ENCH_1H, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Berserking]",									SEND_ENCH_1H, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Black Magic]",									SEND_ENCH_1H, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Blade Ward]",									SEND_ENCH_1H, 3);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Blood Draining]",								SEND_ENCH_1H, 4);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Exceptional Agility]",							SEND_ENCH_1H, 5);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Exceptional Spirit]",							SEND_ENCH_1H, 6);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Icebreaker]",									SEND_ENCH_1H, 7);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Lifeward]",										SEND_ENCH_1H, 8);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Mighty Spellpower]",								SEND_ENCH_1H, 9);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Mongoose]",										SEND_ENCH_1H, 10);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Superior Potency]",								SEND_ENCH_1H, 11);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Titanguard]",									SEND_ENCH_1H, 12);
				}
				break;

			case PG_ENCH_2H:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Spellpower]",							SEND_ENCH_2H, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Major Agility]",									SEND_ENCH_2H, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Massacre]",										SEND_ENCH_2H, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Scourgebane]",									SEND_ENCH_2H, 3);
				}
				break;

			case PG_ENCH_BR:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Exceptional Intellect]",							SEND_ENCH_BR, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Expertise]",										SEND_ENCH_BR, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Assault]",								SEND_ENCH_BR, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Major Spirit]",									SEND_ENCH_BR, 3);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Major Stamina]",									SEND_ENCH_BR, 4);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Superior Spellpower]",							SEND_ENCH_BR, 5);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Fur Lining - Arcane Resist]",					SEND_ENCH_BR, 6);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Fur Lining - Attack Power]",						SEND_ENCH_BR, 7);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Fur Lining - Fire Resist]",						SEND_ENCH_BR, 8);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Fur Lining - Frost Resist]",						SEND_ENCH_BR, 9);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Fur Lining - Nature Resist]",					SEND_ENCH_BR, 10);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Fur Lining - Shadow Resist]",					SEND_ENCH_BR, 11);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Fur Lining - Spellpower]",						SEND_ENCH_BR, 12);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Fur Lining - Stamina]",							SEND_ENCH_BR, 13);
				}
				break;

			case PG_ENCH_CH:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Exceptional Mana]",								SEND_ENCH_CH, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Exceptional Resilience]",						SEND_ENCH_CH, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Defense]",								SEND_ENCH_CH, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Mana Restoration]",						SEND_ENCH_CH, 3);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Powerful Stats]",								SEND_ENCH_CH, 4);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Super Health]",									SEND_ENCH_CH, 5);
				}
				break;

			case PG_ENCH_CL:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Darkglow Embroidery]",							SEND_ENCH_CL, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Speed]",									SEND_ENCH_CL, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Lightweave Embroidery]",							SEND_ENCH_CL, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Major Agility]",									SEND_ENCH_CL, 3);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Mighty Armor]",									SEND_ENCH_CL, 4);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Shadow Armor]",									SEND_ENCH_CL, 5);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Spell Piercing]",								SEND_ENCH_CL, 6);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Swordguard Embroidery]",							SEND_ENCH_CL, 7);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Titanweave]",									SEND_ENCH_CL, 8);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Wisdom]",										SEND_ENCH_CL, 9);
				}
				break;

			case PG_ENCH_FT:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Assault]",								SEND_ENCH_FT, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Fortitude]",								SEND_ENCH_FT, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Spirit]",								SEND_ENCH_FT, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Vitality]",								SEND_ENCH_FT, 3);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Hyperspeed Accelerators]",						SEND_ENCH_FT, 4);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Icewalker]",										SEND_ENCH_FT, 5);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Nitro Boosts]",									SEND_ENCH_FT, 6);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Superior Agility]",								SEND_ENCH_FT, 7);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Tuskarr's Vitality]",							SEND_ENCH_FT, 8);
				}
				break;

			case PG_ENCH_GL:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Armsman]",										SEND_ENCH_GL, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Crusher]",										SEND_ENCH_GL, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Exceptional Spellpower]",						SEND_ENCH_GL, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Expertise]",										SEND_ENCH_GL, 3);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Blasting]",								SEND_ENCH_GL, 4);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Hand-Mounted Pyro Rocket]",						SEND_ENCH_GL, 5);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Major Agility]",									SEND_ENCH_GL, 6);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Precision]",										SEND_ENCH_GL, 7);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Reticulated Armor Webbing]",						SEND_ENCH_GL, 8);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Riding Skill]",									SEND_ENCH_GL, 9);
				}
				break;

			case PG_ENCH_HE:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of Blissful Mending]",					SEND_ENCH_HE, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of Burning Mysteries]",					SEND_ENCH_HE, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of Dominance]",							SEND_ENCH_HE, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of The Eclipsed Moon]",					SEND_ENCH_HE, 3);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of The Flame's Soul]",					SEND_ENCH_HE, 4);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of The Fleeing Shadow]",					SEND_ENCH_HE, 5);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of The Frosty Soul]",					SEND_ENCH_HE, 6);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of The Savage Gladiator]",				SEND_ENCH_HE, 7);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of The Stalwart Protector]",				SEND_ENCH_HE, 8);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of Torment]",							SEND_ENCH_HE, 9);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of Toxic Warding]",						SEND_ENCH_HE, 10);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Arcanum Of Triumph]",							SEND_ENCH_HE, 11);
				}
				break;

			case PG_ENCH_LG:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Brilliant Spellthread]",							SEND_ENCH_LG, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Earthen Leg Armor]",								SEND_ENCH_LG, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Frostscale Leg Armor]",							SEND_ENCH_LG, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Icescale Leg Armor]",							SEND_ENCH_LG, 3);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Sapphire Spellthread]",							SEND_ENCH_LG, 4);
				}
				break;

			case PG_ENCH_RN:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Assault]",										SEND_ENCH_RN, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Spellpower]",							SEND_ENCH_RN, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Stamina]",										SEND_ENCH_RN, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Stats]",											SEND_ENCH_RN, 3);
				}
				break;

			case PG_ENCH_SH:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Defense]",										SEND_ENCH_SH, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Intellect]",								SEND_ENCH_SH, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Titanium Plating]",								SEND_ENCH_SH, 2);
				}
				break;

			case PG_ENCH_SO:
				{
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Inscription Of The Axe]",				SEND_ENCH_SO, 0);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Inscription Of The Crag]",				SEND_ENCH_SO, 1);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Inscription Of The Gladiator]",			SEND_ENCH_SO, 2);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Inscription Of The Pinnacle]",			SEND_ENCH_SO, 3);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Greater Inscription Of The Storm]",				SEND_ENCH_SO, 4);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Inscription Of Dominance]",						SEND_ENCH_SO, 5);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Inscription Of Triumph]",						SEND_ENCH_SO, 6);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Master's Inscription Of The Axe]",				SEND_ENCH_SO, 7);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Master's Inscription Of The Crag]",				SEND_ENCH_SO, 8);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Master's Inscription Of The Pinnacle]",			SEND_ENCH_SO, 9);
					GOSSIP_ITEM(MI_WL1, C_BLK"[Master's Inscription Of The Storm]",				SEND_ENCH_SO, 10);
				}
				break;
			}

			GOSSIP_MENU(66600, pCreature->GetGUID());
		}

		// Select Item & EnchantID
		if (iSender >= SEND_ENCH_1H && iSender <= SEND_ENCH_SO)
		{
			uint32 enchantID = 0;
			Item * targetItem = NULL;

			switch (iSender)
			{
			case SEND_ENCH_1H:	// Enchant 1H Weapon
				{
					enchantID = enchant1HWeapon[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND);

					if (targetItem)
						if (targetItem->GetProto()->InventoryType == INVTYPE_WEAPON || targetItem->GetProto()->InventoryType == INVTYPE_WEAPONMAINHAND)
							EnchantItem(pPlayer, targetItem, enchantID);
						else targetItem = NULL;

					Item * statusItem = targetItem;

					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);

					if (targetItem)
						if (targetItem->GetProto()->InventoryType != INVTYPE_WEAPON && targetItem->GetProto()->InventoryType != INVTYPE_WEAPONOFFHAND)
							targetItem = NULL;

					if (!targetItem && !statusItem)
						SEND_NOTIFICATION("You must equip your one handed weapon!");
				}
				break;

			case SEND_ENCH_2H:	// Enchant 2H Weapon
				{
					enchantID = enchant2HWeapon[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND);

					if (!targetItem || targetItem->GetProto()->InventoryType != INVTYPE_2HWEAPON)
					{
						SEND_NOTIFICATION("You must equip your two handed weapon!");
						targetItem = NULL;
					}
				}
				break;

			case SEND_ENCH_BR:	// Enchant Bracers
				{
					enchantID = enchantBracers[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_WRISTS);

					if (!targetItem)
						SEND_NOTIFICATION("You must equip your bracers!");
				}
				break;

			case SEND_ENCH_CH:	// Enchant Chest
				{
					enchantID = enchantChest[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_CHEST);

					if (!targetItem)
						SEND_NOTIFICATION("You must equip your chest!");
				}
				break;

			case SEND_ENCH_CL:	// Enchant Cloak
				{
					enchantID = enchantCloak[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_BACK);

					if (!targetItem)
						SEND_NOTIFICATION("You must equip your cloak!");
				}
				break;

			case SEND_ENCH_FT:	// Enchant Feet
				{
					enchantID = enchantFeet[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_FEET);

					if (!targetItem)
						SEND_NOTIFICATION("You must equip your boots!");
				}
				break;

			case SEND_ENCH_GL:	// Enchant Gloves
				{
					enchantID = enchantGloves[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_HANDS);

					if (!targetItem)
						SEND_NOTIFICATION("You must equip your gloves!");
				}
				break;

			case SEND_ENCH_HE:	// Enchant Head
				{
					enchantID = enchantHead[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_HEAD);

					if (!targetItem)
						SEND_NOTIFICATION("You must equip your helmet!");
				}
				break;

			case SEND_ENCH_LG:	// Enchant Legs
				{
					enchantID = enchantLegs[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_LEGS);

					if (!targetItem)
						SEND_NOTIFICATION("You must equip your pants!");
				}
				break;

			case SEND_ENCH_RN:	// Enchant Rings
				{
					enchantID = enchantRings[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_FINGER1);

					if (targetItem) EnchantItem(pPlayer, targetItem, enchantID);
					Item * statusItem = targetItem;

					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_FINGER2);

					if (!targetItem && !statusItem)
						SEND_NOTIFICATION("You must equip your ring!");
				}
				break;

			case SEND_ENCH_SH:	// Enchant Shield
				{
					enchantID = enchantShield[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);

					if (!targetItem || targetItem->GetProto()->InventoryType != INVTYPE_SHIELD)
					{
						SEND_NOTIFICATION("You must equip your shield!");
						targetItem = NULL;
					}
				}
				break;

			case SEND_ENCH_SO:	// Enchant Shoulders
				{
					enchantID = enchantShoulders[iAction];
					targetItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_SHOULDERS);

					if (!targetItem)
						SEND_NOTIFICATION("You must equip your shoulders!");
				}
				break;
			}

			if (targetItem) EnchantItem(pPlayer, targetItem, enchantID);

			return OnGossipSelect(pPlayer, pCreature, SEND_MAIN, PG_ENCHANT);
		}

		/*
		Travel
		=================================================================================================================================================================
		=================================================================================================================================================================
		=================================================================================================================================================================
		*/

		if (iSender == SEND_TRAVEL)
		{
			// Pages accessed via Travel Menu
			if (iAction == PG_CITY_T || iAction == PG_TOWN_T || iAction == PG_PVP_T || iAction == PG_D_AND_R)
			{
				GOSSIP_ITEM(MI_CHT, C_WHT"[Back]",												SEND_MAIN, PG_TRAVEL);

				switch (iAction)
				{
				case PG_CITY_T:			// City Travel Menu
					{
						if (PLAYER_TEAM() == HORDE)
						{
							GOSSIP_ITEM(MI_WNG, C_ORG"[Orgrimmar]",								SEND_TE_CITY, 0);
							GOSSIP_ITEM(MI_WNG, C_ORG"[Undercity]",								SEND_TE_CITY, 1);
							GOSSIP_ITEM(MI_WNG, C_ORG"[Thunder Bluff]",							SEND_TE_CITY, 2);
							GOSSIP_ITEM(MI_WNG, C_DGR"[Silvermoon City]",						SEND_TE_CITY, 3);
						}
						if (PLAYER_TEAM() == ALLIANCE)
						{
							GOSSIP_ITEM(MI_WNG, C_ORG"[Stormwind City]",						SEND_TE_CITY, 4);
							GOSSIP_ITEM(MI_WNG, C_ORG"[Ironforge]",								SEND_TE_CITY, 5);
							GOSSIP_ITEM(MI_WNG, C_ORG"[Darnassus]",								SEND_TE_CITY, 6);
							GOSSIP_ITEM(MI_WNG, C_DGR"[The Exodar]",							SEND_TE_CITY, 7);
						}

						GOSSIP_ITEM(MI_WNG, C_DGR"[Shattrath City]",							SEND_TE_CITY, 8);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Dalaran]",									SEND_TE_CITY, 9);
					}
					break;
		
				case PG_TOWN_T:			// Town Travel Menu
					{
						GOSSIP_ITEM(MI_WNG, C_ORG"[Azeroth]",									SEND_TRAVEL, PG_AZ_T);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Outland]",									SEND_TRAVEL, PG_OL_T);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Northrend]",									SEND_TRAVEL, PG_NR_T);
					}
					break;

				case PG_PVP_T:			// PvP Travel Menu
					{
						GOSSIP_ITEM(MI_WNG, C_ORG"[Gurubashi Arena]",							SEND_TE_PVP, PLAYER_TEAM() == HORDE ? 0 : 9);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Dire Maul Arena]",							SEND_TE_PVP, PLAYER_TEAM() == HORDE ? 1 : 10);

						if (PLAYER_TEAM() == HORDE)
						{
							GOSSIP_ITEM(MI_WNG, C_ORG"[Stormwind City Raid]",					SEND_TE_PVP, 2);
							GOSSIP_ITEM(MI_WNG, C_ORG"[Ironforge Raid]",						SEND_TE_PVP, 3);
							GOSSIP_ITEM(MI_WNG, C_ORG"[Darnassus Raid]",						SEND_TE_PVP, 4);
							GOSSIP_ITEM(MI_WNG, C_DGR"[The Exodar Raid]",						SEND_TE_PVP, 5);
						}
						if (PLAYER_TEAM() == ALLIANCE)
						{
							GOSSIP_ITEM(MI_WNG, C_ORG"[Orgrimmar Raid]",						SEND_TE_PVP, 11);
							GOSSIP_ITEM(MI_WNG, C_ORG"[Undercity Raid]",						SEND_TE_PVP, 12);
							GOSSIP_ITEM(MI_WNG, C_ORG"[Thunder Bluff Raid]",					SEND_TE_PVP, 13);
							GOSSIP_ITEM(MI_WNG, C_DGR"[Silvermoon City Raid]",					SEND_TE_PVP, 14);
						}
						
						GOSSIP_ITEM(MI_WNG, C_DGR"[Circle Of Blood]",							SEND_TE_PVP, PLAYER_TEAM() == HORDE ? 6 : 15);
						GOSSIP_ITEM(MI_WNG, C_DGR"[The Ring Of Trials]",						SEND_TE_PVP, PLAYER_TEAM() == HORDE ? 7 : 16);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Wintergrasp]",								SEND_TE_PVP, PLAYER_TEAM() == HORDE ? 8 : 17);
					}
					break;

				case PG_D_AND_R:		// Dungeons And Raids Menu
					{
						GOSSIP_ITEM(MI_WNG, C_ORG"[Azeroth Dungeons]",							SEND_TRAVEL, PG_AZ_D_P1);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Azeroth Raids]",								SEND_TRAVEL, PG_AZ_R);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Outland Dungeons]",							SEND_TRAVEL, PG_OL_D_P1);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Outland Raids]",								SEND_TRAVEL, PG_OL_R);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Northrend Dungeons]",						SEND_TRAVEL, PG_NR_D_P1);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Northrend Raids]",							SEND_TRAVEL, PG_NR_R);
					}
					break;
				}
			}

			// Pages accessed via Town Travel Menu
			if (iAction == PG_AZ_T || iAction == PG_OL_T || iAction == PG_NR_T)
			{
				GOSSIP_ITEM(MI_CHT, C_WHT"[Back]",												SEND_TRAVEL, PG_TOWN_T);

				if (iAction == PG_AZ_T)
				{
					if (PLAYER_TEAM() == HORDE)
						GOSSIP_ITEM(MI_WNG, C_ORG"[Horde Towns]",								SEND_TRAVEL, PG_AZ_F_P1);
					if (PLAYER_TEAM() == ALLIANCE)
						GOSSIP_ITEM(MI_WNG, C_ORG"[Alliance Towns]",							SEND_TRAVEL, PG_AZ_F_P1);

					GOSSIP_ITEM(MI_WNG, C_ORG"[Neutral Towns]",									SEND_TRAVEL, PG_AZ_N);
				}

				if (iAction == PG_OL_T)
				{
					if (PLAYER_TEAM() == HORDE)
						GOSSIP_ITEM(MI_WNG, C_DGR"[Horde Towns]",								SEND_TRAVEL, PG_OL_F);
					if (PLAYER_TEAM() == ALLIANCE)
						GOSSIP_ITEM(MI_WNG, C_DGR"[Alliance Towns]",							SEND_TRAVEL, PG_OL_F);

					GOSSIP_ITEM(MI_WNG, C_DGR"[Neutral Towns]",									SEND_TRAVEL, PG_OL_N);
				}

				if (iAction == PG_NR_T)
				{
					if (PLAYER_TEAM() == HORDE)
						GOSSIP_ITEM(MI_WNG, C_BLU"[Horde Towns]",								SEND_TRAVEL, PG_NR_F_P1);
					if (PLAYER_TEAM() == ALLIANCE)
						GOSSIP_ITEM(MI_WNG, C_BLU"[Alliance Towns]",							SEND_TRAVEL, PG_NR_F_P1);

					GOSSIP_ITEM(MI_WNG, C_BLU"[Neutral Towns]",									SEND_TRAVEL, PG_NR_N_P1);
				}
			}

			// Pages accessed via Azeroth Town Travel Menu
			if (iAction == PG_AZ_F_P1 || iAction == PG_AZ_F_P2 || iAction == PG_AZ_N)
			{
				GOSSIP_ITEM(MI_CHT, C_WHT"[Back]",												SEND_TRAVEL, PG_AZ_T);

				if (iAction == PG_AZ_F_P1)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 2] -->",									SEND_TRAVEL, PG_AZ_F_P2);

					if (PLAYER_TEAM() == HORDE)
					{
						GOSSIP_ITEM(MI_WNG, C_ORG"[Bloodvenom Post]",							SEND_TE_T_AZ, 0);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Brackenwall Village]",						SEND_TE_T_AZ, 1);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Camp Mojache]",								SEND_TE_T_AZ, 2);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Camp Taurajo]",								SEND_TE_T_AZ, 3);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Flame Crest]",								SEND_TE_T_AZ, 4);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Freewind Post]",								SEND_TE_T_AZ, 5);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Grom'gol Base Camp]",						SEND_TE_T_AZ, 6);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Hammerfall]",								SEND_TE_T_AZ, 7);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Kargath]",									SEND_TE_T_AZ, 8);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Revantusk Village]",							SEND_TE_T_AZ, 9);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Shadowprey Village]",						SEND_TE_T_AZ, 10);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Splintertree Post]",							SEND_TE_T_AZ, 11);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Stonard]",									SEND_TE_T_AZ, 12);
					}
					if (PLAYER_TEAM() == ALLIANCE)
					{
						GOSSIP_ITEM(MI_WNG, C_ORG"[Aerie Peak]",								SEND_TE_T_AZ, 20);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Astranaar]",									SEND_TE_T_AZ, 21);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Auberdine]",									SEND_TE_T_AZ, 22);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Blood Watch]",								SEND_TE_T_AZ, 23);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Chillwind Camp]",							SEND_TE_T_AZ, 24);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Feathermoon Stronghold]",					SEND_TE_T_AZ, 25);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Darkshire]",									SEND_TE_T_AZ, 26);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Lakeshire]",									SEND_TE_T_AZ, 27);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Menethil Harbor]",							SEND_TE_T_AZ, 28);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Nethergarde Keep]",							SEND_TE_T_AZ, 29);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Nijel's Point]",								SEND_TE_T_AZ, 30);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Rebel Camp]",								SEND_TE_T_AZ, 31);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Refuge Point]",								SEND_TE_T_AZ, 32);
					}
				}

				if (iAction == PG_AZ_F_P2)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 1] -->",									SEND_TRAVEL, PG_AZ_F_P1);

					if (PLAYER_TEAM() == HORDE)
					{
						GOSSIP_ITEM(MI_WNG, C_ORG"[Sun Rock Retreat]",							SEND_TE_T_AZ, 13);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Tarren Mill]",								SEND_TE_T_AZ, 14);
						GOSSIP_ITEM(MI_WNG, C_ORG"[The Crossroads]",							SEND_TE_T_AZ, 15);
						GOSSIP_ITEM(MI_WNG, C_ORG"[The Sepulcher]",								SEND_TE_T_AZ, 16);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Tranquillien]",								SEND_TE_T_AZ, 17);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Valormok]",									SEND_TE_T_AZ, 18);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Zoram'gar Outpost]",							SEND_TE_T_AZ, 19);
					}
					if (PLAYER_TEAM() == ALLIANCE)
					{
						GOSSIP_ITEM(MI_WNG, C_ORG"[Sentinell Hill]",							SEND_TE_T_AZ, 33);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Southshore]",								SEND_TE_T_AZ, 34);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Stonetalon Peak]",							SEND_TE_T_AZ, 35);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Talonbranch Glade]",							SEND_TE_T_AZ, 36);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Talrendis Point]",							SEND_TE_T_AZ, 37);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Thalanaar]",									SEND_TE_T_AZ, 38);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Thelsamar]",									SEND_TE_T_AZ, 39);
						GOSSIP_ITEM(MI_WNG, C_ORG"[Theramore Isle]",							SEND_TE_T_AZ, 40);
					}
				}

				if (iAction == PG_AZ_N)
				{
					GOSSIP_ITEM(MI_WNG, C_ORG"[Booty Bay]",										SEND_TE_T_AZ, 41);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Cenarion Hold]",									SEND_TE_T_AZ, 42);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Emerald Sanctuary]",								SEND_TE_T_AZ, 43);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Everlook]",										SEND_TE_T_AZ, 44);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Gadgetzan]",										SEND_TE_T_AZ, 45);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Isle Of Quel'Danas]",							SEND_TE_T_AZ, 46);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Light's Hope Chapel]",							SEND_TE_T_AZ, 47);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Marshal's Refuge]",								SEND_TE_T_AZ, 48);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Moonglade]",										SEND_TE_T_AZ, 49);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Mudsprocket]",									SEND_TE_T_AZ, 50);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Ratchet]",										SEND_TE_T_AZ, 51);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Thorium Point]",									SEND_TE_T_AZ, 52);
				}
			}

			// Pages accessed via Outland Town Travel Menu
			if (iAction == PG_OL_F || iAction == PG_OL_N)
			{
				GOSSIP_ITEM(MI_CHT, C_WHT"[Back]",												SEND_TRAVEL, PG_OL_T);

				if (iAction == PG_OL_F)
				{
					if (PLAYER_TEAM() == HORDE)
					{
						GOSSIP_ITEM(MI_WNG, C_DGR"[Falcon Watch]",								SEND_TE_T_OL, 0);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Garadar]",									SEND_TE_T_OL, 1);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Mok'Nathal Village]",						SEND_TE_T_OL, 2);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Shadowmoon Village]",						SEND_TE_T_OL, 3);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Spinebreaker Post]",							SEND_TE_T_OL, 4);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Stonebreaker Hold]",							SEND_TE_T_OL, 5);	
						GOSSIP_ITEM(MI_WNG, C_DGR"[Swamprat Post]",								SEND_TE_T_OL, 6);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Thrallmar]",									SEND_TE_T_OL, 7);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Thunderlord Stronghold]",					SEND_TE_T_OL, 8);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Zabra'jin]",									SEND_TE_T_OL, 9);
					}
					if (PLAYER_TEAM() == ALLIANCE)
					{
						GOSSIP_ITEM(MI_WNG, C_DGR"[Allerian Stronghold]",						SEND_TE_T_OL, 10);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Honor Hold]",								SEND_TE_T_OL, 11);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Orebor Harborage]",							SEND_TE_T_OL, 12);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Shatter Point]",								SEND_TE_T_OL, 13);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Sylvanaar]",									SEND_TE_T_OL, 14);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Telaar]",									SEND_TE_T_OL, 15);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Telredor]",									SEND_TE_T_OL, 16);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Temple Of Telhamat]",						SEND_TE_T_OL, 17);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Toshley's Station]",							SEND_TE_T_OL, 18);
						GOSSIP_ITEM(MI_WNG, C_DGR"[Wildhammer Stronghold]",						SEND_TE_T_OL, 19);
					}
				}

				if (iAction == PG_OL_N)
				{
					GOSSIP_ITEM(MI_WNG, C_DGR"[Altar Of Sha'tar]",								SEND_TE_T_OL, 20);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Area 52]",										SEND_TE_T_OL, 21);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Blackwind Landing]",								SEND_TE_T_OL, 22);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Cenarion Refuge]",								SEND_TE_T_OL, 23);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Cosmowrench]",									SEND_TE_T_OL, 24);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Evergrove]",										SEND_TE_T_OL, 25);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Ogri'la]",										SEND_TE_T_OL, 26);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Sanctum Of The Stars]",							SEND_TE_T_OL, 27);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Stormspire]",									SEND_TE_T_OL, 28);
					GOSSIP_ITEM(MI_WNG, C_DGR"[The Stair Of Destiny]",							SEND_TE_T_OL, 29);
				}
			}

			// Pages accessed via Northrend Town Travel Menu
			if (iAction == PG_NR_F_P1 || iAction == PG_NR_F_P2 || iAction == PG_NR_N_P1 || iAction == PG_NR_N_P2)
			{
				GOSSIP_ITEM(MI_CHT, C_WHT"[Back]",												SEND_TRAVEL, PG_NR_T);

				if (iAction == PG_NR_F_P1)
				{
					if (PLAYER_TEAM() == HORDE)
					{
						GOSSIP_ITEM(MI_CHD, C_BLK"[Page 2] -->",								SEND_TRAVEL, PG_NR_F_P2);

						GOSSIP_ITEM(MI_WNG, C_BLU"[Agmar's Hammer]",							SEND_TE_T_NR, 0);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Apothecary Camp]",							SEND_TE_T_NR, 1);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Bor'gorok Outpost]",							SEND_TE_T_NR, 2);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Camp Oneqwah]",								SEND_TE_T_NR, 3);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Camp Taunka'lo]",							SEND_TE_T_NR, 4);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Camp Winterhoof]",							SEND_TE_T_NR, 5);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Conquest Hold]",								SEND_TE_T_NR, 6);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Dubra'Jin]",									SEND_TE_T_NR, 7);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Grom'arsh Crash-Site]",						SEND_TE_T_NR, 8);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Kor'kron Vanguard]",							SEND_TE_T_NR, 9);
						GOSSIP_ITEM(MI_WNG, C_BLU"[New Agamand]",								SEND_TE_T_NR, 10);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Sunreaver's Command]",						SEND_TE_T_NR, 11);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Taunka'le Village]",							SEND_TE_T_NR, 12);
					}
					if (PLAYER_TEAM() == ALLIANCE)
					{
						GOSSIP_ITEM(MI_WNG, C_BLU"[Amberpine Lodge]",							SEND_TE_T_NR, 16);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Fizzcrank Airstrip]",						SEND_TE_T_NR, 17);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Fordragon Hold]",							SEND_TE_T_NR, 18);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Fort Wildervar]",							SEND_TE_T_NR, 19);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Frosthold]",									SEND_TE_T_NR, 20);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Stars' Rest]",								SEND_TE_T_NR, 21);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Valguarde]",									SEND_TE_T_NR, 22);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Valiance Keep]",								SEND_TE_T_NR, 23);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Westfall Brigade Encampment]",				SEND_TE_T_NR, 24);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Westguard Keep]",							SEND_TE_T_NR, 25);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Windrunner's Overlook]",						SEND_TE_T_NR, 26);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Wintergarde Keep]",							SEND_TE_T_NR, 27);
					}
				}

				if (iAction == PG_NR_F_P2)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 1] -->",									SEND_TRAVEL, PG_NR_F_P1);

					if (PLAYER_TEAM() == HORDE)
					{
						GOSSIP_ITEM(MI_WNG, C_BLU"[Vengeance Landing]",							SEND_TE_T_NR, 13);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Venomspite]",								SEND_TE_T_NR, 14);
						GOSSIP_ITEM(MI_WNG, C_BLU"[Warsong Hold]",								SEND_TE_T_NR, 15);
					}
					if (PLAYER_TEAM() == ALLIANCE)
					{
					}
				}

				if (iAction == PG_NR_N_P1)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 2] -->",									SEND_TRAVEL, PG_NR_N_P2);

					GOSSIP_ITEM(MI_WNG, C_BLU"[Amber Ledge]",									SEND_TE_T_NR, 28);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Argent Tournament Grounds]",						SEND_TE_T_NR, 29);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Bouldercrag's Refuge]",							SEND_TE_T_NR, 30);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Crusaders' Pinnacle]",							SEND_TE_T_NR, 31);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Death's Rise]",									SEND_TE_T_NR, 32);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Din Niffelem]",									SEND_TE_T_NR, 33);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Ebon Watch]",									SEND_TE_T_NR, 34);
					GOSSIP_ITEM(MI_WNG, C_BLU"[K3]",											SEND_TE_T_NR, 35);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Kamagua]",										SEND_TE_T_NR, 36);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Lakeside Landing]",								SEND_TE_T_NR, 37);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Light's Breach]",								SEND_TE_T_NR, 38);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Moa'ki Harbor]",									SEND_TE_T_NR, 39);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Nesingwary Base Camp]",							SEND_TE_T_NR, 40);
				}

				if (iAction == PG_NR_N_P2)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 1] -->",									SEND_TRAVEL, PG_NR_N_P1);

					GOSSIP_ITEM(MI_WNG, C_BLU"[The Argent Strand]",								SEND_TE_T_NR, 41);
					GOSSIP_ITEM(MI_WNG, C_BLU"[The Argent Vanguard]",							SEND_TE_T_NR, 42);
					GOSSIP_ITEM(MI_WNG, C_BLU"[The Shadow Vault]",								SEND_TE_T_NR, 43);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Transitus Shield]",								SEND_TE_T_NR, 44);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Unu'pe]",										SEND_TE_T_NR, 45);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Wyrmrest Temple]",								SEND_TE_T_NR, 46);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Zim'Torga]",										SEND_TE_T_NR, 47);
				}
			}

			// Pages accessed via Dungeons And Raids Menu
			if (iAction == PG_AZ_D_P1 || iAction == PG_AZ_D_P2 || iAction == PG_AZ_R ||
				iAction == PG_OL_D_P1 || iAction == PG_OL_D_P2 || iAction == PG_OL_R ||
				iAction == PG_NR_D_P1 || iAction == PG_NR_D_P2 || iAction == PG_NR_R)
			{
				GOSSIP_ITEM(MI_CHT, C_WHT"[Back]",												SEND_TRAVEL, PG_D_AND_R);

				if (iAction == PG_AZ_D_P1)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 2] -->",									SEND_TRAVEL, PG_AZ_D_P2);

					GOSSIP_ITEM(MI_WNG, C_ORG"[Blackfathom Deeps]",								SEND_TE_D_AZ, 0);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Blackrock Depths]",								SEND_TE_D_AZ, 1);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Blackrock Spire]",								SEND_TE_D_AZ, 2);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Dire Maul]",										SEND_TE_D_AZ, 3);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Gnomeregan]",									SEND_TE_D_AZ, 4);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Maraudon]",										SEND_TE_D_AZ, 5);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Razorfen Downs]",								SEND_TE_D_AZ, 6);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Razorfen Kraul]",								SEND_TE_D_AZ, 7);	  
					GOSSIP_ITEM(MI_WNG, C_ORG"[Scarlet Monastery]",								SEND_TE_D_AZ, 8);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Scholomance]",									SEND_TE_D_AZ, 9);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Shadowfang Keep]",								SEND_TE_D_AZ, 10);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Stratholme]",									SEND_TE_D_AZ, 11);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Sunken Temple]",									SEND_TE_D_AZ, 12);
				}

				if (iAction == PG_AZ_D_P2)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 1] -->",									SEND_TRAVEL, PG_AZ_D_P1);

					GOSSIP_ITEM(MI_WNG, C_ORG"[The Deadmines]",									SEND_TE_D_AZ, 13);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Uldaman]",										SEND_TE_D_AZ, 14);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Wailing Caverns]",								SEND_TE_D_AZ, 15);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Zul'Farrak]",									SEND_TE_D_AZ, 16);
				}

				if (iAction == PG_AZ_R)
				{
					GOSSIP_ITEM(MI_WNG, C_ORG"[Blackwing Lair]",								SEND_TE_D_AZ, 17);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Molten Core]",									SEND_TE_D_AZ, 18);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Ruins Of Ahn'Qiraj]",							SEND_TE_D_AZ, 19);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Temple Of Ahn'Qiraj]",							SEND_TE_D_AZ, 20);
					GOSSIP_ITEM(MI_WNG, C_ORG"[Zul'Gurub]",										SEND_TE_D_AZ, 21);
				}

				if (iAction == PG_OL_D_P1)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 2] -->",									SEND_TRAVEL, PG_OL_D_P2);

					GOSSIP_ITEM(MI_WNG, C_DGR"[Auchindoun: Auchenai Crypts]",					SEND_TE_D_OL, 0);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Auchindoun: Mana Tombs]",						SEND_TE_D_OL, 1);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Auchindoun: Sethekk Halls]",						SEND_TE_D_OL, 2);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Auchindoun: Shadow Labyrinth]",					SEND_TE_D_OL, 3);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Caverns Of Time: Old Hillsbrad Foothills]",		SEND_TE_D_OL, 4);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Caverns Of Time: The Black Morass]",				SEND_TE_D_OL, 5);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Coilfang Reservoir: The Slave Pens]",			SEND_TE_D_OL, 6);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Coilfang Reservoir: The Steamvault]",			SEND_TE_D_OL, 7);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Coilfang Reservoir: The Underbog]",				SEND_TE_D_OL, 8);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Hellfire Citadel: Hellfire Ramparts]",			SEND_TE_D_OL, 9);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Hellfire Citadel: The Blood Furnace]",			SEND_TE_D_OL, 10);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Hellfire Citadel: The Shattered Halls]",			SEND_TE_D_OL, 11);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Magisters' Terrace]",							SEND_TE_D_OL, 12);
				}

				if (iAction == PG_OL_D_P2)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 1] -->",									SEND_TRAVEL, PG_OL_D_P1);

					GOSSIP_ITEM(MI_WNG, C_DGR"[Tempest Keep: The Arcatraz]",					SEND_TE_D_OL, 13);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Tempest Keep: The Botanica]",					SEND_TE_D_OL, 14);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Tempest Keep: The Mechanar]",					SEND_TE_D_OL, 15);
				}

				if (iAction == PG_OL_R)
				{
					GOSSIP_ITEM(MI_WNG, C_DGR"[Black Temple]",									SEND_TE_D_OL, 16);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Caverns Of Time: Hyjal Summit]",					SEND_TE_D_OL, 17);	
					GOSSIP_ITEM(MI_WNG, C_DGR"[Gruul's Lair]",									SEND_TE_D_OL, 18);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Hellfire Citadel: Magtheridon's Lair]",			SEND_TE_D_OL, 19);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Karazhan]",										SEND_TE_D_OL, 20);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Serpentshrine Cavern]",							SEND_TE_D_OL, 21);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Sunwell Plateau]",								SEND_TE_D_OL, 22);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Tempest Keep: The Eye]",							SEND_TE_D_OL, 23);
					GOSSIP_ITEM(MI_WNG, C_DGR"[Zul'Aman]",										SEND_TE_D_OL, 24);
				}
				
				if (iAction == PG_NR_D_P1)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 2] -->",									SEND_TRAVEL, PG_NR_D_P2);

					GOSSIP_ITEM(MI_WNG, C_BLU"[Ahn'kahet: The Old Kingdom]",					SEND_TE_D_NR, 0);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Azjol-Nerub: Azjol-Nerub]",						SEND_TE_D_NR, 1);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Caverns Of Time: Culling Of Stratholme]",		SEND_TE_D_NR, 2);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Drak'Tharon Keep]",								SEND_TE_D_NR, 3);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Gundrak]",										SEND_TE_D_NR, 4);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Icecrown Citadel: Halls Of Reflection]",			SEND_TE_D_NR, 5);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Icecrown Citadel: Pit Of Saron]",				SEND_TE_D_NR, 6);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Icecrown Citadel: The Forge Of Souls]",			SEND_TE_D_NR, 7);
					GOSSIP_ITEM(MI_WNG, C_BLU"[The Nexus: The Nexus]",							SEND_TE_D_NR, 8);
					GOSSIP_ITEM(MI_WNG, C_BLU"[The Nexus: The Oculus]",							SEND_TE_D_NR, 9);
					GOSSIP_ITEM(MI_WNG, C_BLU"[The Violet Hold]",								SEND_TE_D_NR, 10);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Trial Of The Champion]",							SEND_TE_D_NR, 11);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Ulduar: Halls Of Lighting]",						SEND_TE_D_NR, 12);
				}

				if (iAction == PG_NR_D_P2)
				{
					GOSSIP_ITEM(MI_CHD, C_BLK"[Page 1] -->",									SEND_TRAVEL, PG_NR_D_P1);

					GOSSIP_ITEM(MI_WNG, C_BLU"[Ulduar: Halls Of Stone]",						SEND_TE_D_NR, 13);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Utgarde Keep: Utgarde Keep]",					SEND_TE_D_NR, 14);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Utgarde Keep: Utgarde Pinnacle]",				SEND_TE_D_NR, 15);
				}

				if (iAction == PG_NR_R)
				{
					GOSSIP_ITEM(MI_WNG, C_BLU"[Icecrown Citadel]",								SEND_TE_D_NR, 16);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Naxxramas]",										SEND_TE_D_NR, 17);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Onyxia's Lair]",									SEND_TE_D_NR, 18);
					GOSSIP_ITEM(MI_WNG, C_BLU"[The Nexus: The Eye Of Eternity]",				SEND_TE_D_NR, 19);
					GOSSIP_ITEM(MI_WNG, C_BLU"[The Obsidian Sanctum]",							SEND_TE_D_NR, 20);
					GOSSIP_ITEM(MI_WNG, C_BLU"[The Ruby Sanctum]",								SEND_TE_D_NR, 21);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Trial Of The Crusader]",							SEND_TE_D_NR, 22);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Ulduar]",										SEND_TE_D_NR, 23);
					GOSSIP_ITEM(MI_WNG, C_BLU"[Vault Of Archavon]",								SEND_TE_D_NR, 24);
				}
			}

			GOSSIP_MENU(66600, pCreature->GetGUID());
		}

		return true;
	}

	
};
	// Register Script
void AddSC_all_in_one_NPC()
{
  new npc_all_in_one();
}